En Elixir, le calcul est considéré comme une série de transformations fondamentales. Les données sont immuables, et l'opérateur = n'est pas utilisé pour l'affectation, mais pour le correspondance de motifs.
1. L'opérateur de correspondance
La correspondance permet de lier des valeurs à des modèles. Si la structure du côté gauche ne correspond pas à celle du côté droit, la transformation échoue. Elixir utilise des opérateurs spécifiques pour le flux de données : Arithmétique (+, -, *, /), Comparaison (===, !==, >=), et Concaténation (<> pour les chaînes de caractères, ++ pour les listes).
2. L'expression 'with'
L'expression with orchestre des transformations en plusieurs étapes où le succès est conditionnel. Elle permet de chaîner des correspondances en utilisant <-. Contrairement à l'opérateur de correspondance =, si une correspondance échoue dans <- échoue, l'expression retourne la valeur qui ne correspond pas au lieu de lever une erreur.
3. Portée et syntaxe
Sous le capot, with est traité comme un macro ou un appel de fonction. Les variables définies à l'intérieur n'ont pas de portée externe. La syntaxe comme moyenne = with count = ..., do: somme/compte est la manière basée sur les expressions de calculer des valeurs dérivées.
$$\text{moyenne} = \frac{\sum_{i=1}^{n} x_i}{n}$$